const {
  getList,
  getDetail,
  newBlog,
  updateBlog,
  delBlog
} = require('../controller/blog')
const { SuccessModel, ErrorModel } = require('../model/resModel')

// 统一的登录验证函数
const loginCheck = (req) => {
  if (!req.session.username) {
    return Promise.resolve(
      new ErrorModel('尚未登录')
    )
  }
}

const handleBlogRouter = (req, res) => {
  const method = req.method
  const url = req.url
  const path = url.split('?')[0]
  const id = req.query.id

  // 获取博客列表
  if (method === 'GET' && path === '/api/blog/list') {
    let author = req.query.author || ''
    const keyword = req.query.keyword

    // 验证是否为个人主页登录
    if (req.query.isadmin) {
      const loginCheckResult = loginCheck(req)
      if (loginCheckResult) {
        // 未登录
        return loginCheckResult
      }
      // 只查询自己的博客
      author = req.session.username
    }

    const result = getList(author, keyword)

    return result.then(listData => {
      return new SuccessModel(listData)
    })
  }

  // 获取博客详情
  if (method === 'GET' && path === '/api/blog/detail') {
    const result = getDetail(id)

    return result.then(listData => {
      return new SuccessModel(listData)
    })
  }

  // 新建一篇博客
  if (method === 'POST' && path === '/api/blog/new') {
    // 登录验证
    const loginCheckResult = loginCheck(req)
    if (loginCheckResult) {
      return loginCheckResult
    }

    req.body.author = req.session.username
    const result = newBlog(req.body)
    return result.then(data => {
      return new SuccessModel(data)
    })
  }

  // 更新一篇博客
  if (method === 'POST' && path === '/api/blog/update') {
    // 登录验证
    const loginCheckResult = loginCheck(req)
    if (loginCheckResult) {
      return loginCheckResult
    }

    const result = updateBlog(id, req.body)
    return result.then(val => {
      if (val) {
        return new SuccessModel('更新博客成功！')
      } else {
        return new ErrorModel('更新博客失败...')
      }
    })
  }

  // 删除一篇博客
  if (method === 'POST' && path === '/api/blog/del') {
    // 登录验证
    const loginCheckResult = loginCheck(req)
    if (loginCheckResult) {
      return loginCheckResult
    }

    req.body.author = req.session.username
    const result = delBlog(id, req.body.author)
    return result.then(val => {
      if (val) {
        return new SuccessModel('删除博客成功！')
      } else {
        return new ErrorModel('删除博客失败...')
      }
    })
  }
}

module.exports = handleBlogRouter